import asyncio
import time
from .异常 import 超时
from typing import Callable


async def future在规定时间内是否完成(
        用时: float, 检查时间间隔: float, future: asyncio.Future):
    开始时间 = time.time()
    while time.time() - 开始时间 < 用时:
        if future.done():
            return True
        await asyncio.sleep(检查时间间隔)
    raise 超时()


async def 在规定时间内重复运行(
        用时: float, 每次运行的时间间隔: float,
        fn, *args, **kwargs):
    开始时间 = time.time()
    while time.time() - 开始时间 < 用时:
        await fn(*args, **kwargs)
        await asyncio.sleep(每次运行的时间间隔)
    raise 超时()
